const { app, BrowserWindow, Menu,globalShortcut  } = require("electron");
const path = require("path");
const fs = require("fs");
const chokidar = require("chokidar");
const { exec } = require("child_process");
// 判断桌面是否有已经有快捷方式
const tool = require("./tool");
// 引入菜单模板
// const createChineseMenuTemplate = require("./menuTemplate");

// 加载配置
let appConfig = {
  // 系统访问地址（请修改为实际地址）
  // sysUrl: "https://192.168.59.103:26000/command-center/idps/",
  sysUrl: "https://10.105.12.91:3001/client",
  whiteList: ["https://192.168.59.103:26000", "wss://192.168.59.103:26000","https://10.105.12.91:3001/client","wss://10.105.12.91:3001"],
};

// 允许特定主机的证书
app.on(
  "certificate-error",
  (event, webContents, url, error, certificate, callback) => {
    event.preventDefault();
    callback(true);
    // 检查是否是目标服务器的证书
    // let whiteList = appConfig.whiteList || ["https://192.168.241.89:26000"];
    // const isTrusted = whiteList.some((host) => url.startsWith(host));
    // // 检查是否是白名单中的主机
    // if (isTrusted) {
    //   // 信任该证书
    //   event.preventDefault();
    //   callback(true);
    // } else {
    //   // 其他证书仍按默认处理
    //   callback(false);
    // }
  }
);

// 在创建窗口前生成菜单模板（需要传入watcher）
// const chineseMenuTemplate = createChineseMenuTemplate();

// 全局启动屏窗口引用
let splashWindow;
// 添加启动屏
function createSplashWindow() {
  splashWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    frame: false, // 无边框窗口
    transparent: true, // 透明背景（可选）
    center: true, // 居中显示
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
    },
  });
  // 加载本地启动页（需提前创建splash.html）
  splashWindow.loadFile(path.join(__dirname, "splash.html")).catch((err) => {
    console.error("加载启动页失败:", err);
  });
}

// 保持对窗口对象的全局引用，否则窗口会被自动关闭
let mainWindow;
function createWindow() {
  // 先显示启动屏
  createSplashWindow();
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    title: "融合调度平台",
    show: false, // 新增：窗口创建后不立即显示
    webPreferences: {
      // 禁用Node集成以提高安全性
      nodeIntegration: false,
      contextIsolation: true,
      // 允许加载远程内容
      webSecurity: true,
      preload: path.join(__dirname, "preload.js"),
      // 启用缓存（默认开启，显式声明确保生效）
      cacheEnabled: true, // 新增：加速重复加载
    },
  });

  // 加载指定url
  mainWindow.loadURL(appConfig.sysUrl).catch((err) => {
    // 失败时显示错误信息
    mainWindow.loadURL(
      `data:text/html;charset=utf-8,<h1>加载失败:${appConfig.sysUrl}</h1><p>${err.message}</p>`
    );
  });

  // 等待页面加载完成（did-finish-load事件）
  mainWindow.webContents.on("did-finish-load", async () => {
    if (splashWindow && !splashWindow.isDestroyed()) {
      splashWindow.close(); // 关闭启动屏
    }
    mainWindow.show(); // 显示主窗口
    // 执行JavaScript获取window的属性（如title、innerWidth等）
    console.log("页面加载完成，开始获取window信息...");
    const windowInfo = await mainWindow.webContents.executeJavaScript(`
      // 在渲染进程中执行的代码，返回window相关信息
      ({
        title: window.document.title,
        url: window.location.href,
        width: window.innerWidth,
        config: window.SYSCONFIG,
        myData: window.myData || '未定义' // 若页面中定义了window.myData
      })
    `);

    // console.log("从渲染进程获取的window信息:", windowInfo);
  });

  // 向渲染进程发送配置
  mainWindow.webContents.on("did-finish-load", () => {
    mainWindow.webContents.send("config-loaded", appConfig);
  });

  // 打开开发者工具（调试用，发布时可注释）
  mainWindow.webContents.openDevTools();

  // 创建并设置中文菜单
  // const chineseMenu = Menu.buildFromTemplate(chineseMenuTemplate);
  // Menu.setApplicationMenu(chineseMenu);
  Menu.setApplicationMenu(null);
  

  // 窗口关闭时的处理
  mainWindow.on("closed", () => {
    mainWindow = null;
  });
}

// 应用就绪后创建窗口
app.on("ready", () => {
  // tool.checkAndCreateShortcut();
  createWindow();
    // 注册打开开发者工具的快捷键
    const ret = globalShortcut.register(
      process.platform === 'darwin' ? 'Cmd+Opt+I' : "Ctrl+Shift+I", // 适配 macOS/Windows
      () => {
        if (mainWindow) {
          mainWindow.webContents.openDevTools(); // 打开控制台
        }
      }
    );
  
    if (!ret) {
      console.log('快捷键注册失败');
    }
});

// 所有窗口关闭时退出应用
app.on("window-all-closed", () => {
  // 在macOS上，应用通常会保持活动状态直到用户 Cmd + Q 退出
  if (process.platform !== "darwin") {
    app.quit();
  }
});

// 在macOS上，点击 dock 图标且没有其他窗口时重新创建窗口
app.on("activate", () => {
  if (mainWindow === null) {
    createWindow();
  }
});

// 导出配置供其他模块使用
module.exports = { appConfig };
